#include <iostream>
#include <cstdlib>
#include <vector>
#include <cmath>
#include <fstream>
#include <ctime>
#include "tab.h"
using namespace std;

struct casella 
{
	int numero;
	int card;
	vector<bool> insieme;
};

struct passo 
{
	int riga;
	int col;

	passo(int r, int c): riga(r), col(c) {}
};

class sudoku 
{

public:
	sudoku();
	void genera_tabella();
	void stampa_griglia_sudoku();
	void stampa_soluzione_sudoku();

private:
	void inserisci_random();
	void rimuovi_possibilita(int riga, int col, int num);
	void aggiungi_possibilita(int riga, int col, int num);
	int possibilita_minima(int &riga, int &col);
	int possibilita_massima(int &riga, int &col);
	int trova_libero(int riga, int col);
	
private:
	int dim;
	table<casella> griglia;
	table<casella> gioco;

};
